<?php
//内置函数  array_filter() 函数用回调函数过滤数组中的元素。
//array array_filter ( array $array [, callable $callback [, int $flag = 0 ]] )
//参数1：必须。规定要过滤的数组。
//参数2：可选。规定要用的回调函数。
//参数3：可选。决定 callback 接收的参数形式
//返回值：返回过滤的数组。
//该函数把输入数组中的每个键值传给回调函数。如果回调函数返回 true，则把输入数组中的当前键值返回给结果数组。数组键名保持不变。
$array = array(1,2,3,0,0.0,null,true,false,"false");
$res = array_filter($array);
var_dump($res);//返回的新数组是当为true的
// echo "\n";
var_dump($array);

function my_string($v) {
    if (is_string($v)) {
        return true;
    }else {
        return false;
    }
}
//传入回调函数
$res = array_filter($array,'my_string');
var_dump($res);
var_dump($array);
//回调函数传入系统默认的函数
$res = array_filter($array,'is_int');
var_dump($res);
var_dump($array);

//如何实现array_filter的功能
function my_filter(array $arr,$func = '') {
    $new_arr = array();
    //如果$func == 空，直接过滤数组中单元为false的元素
    if (empty($func)) {
        foreach ($arr as $k=>$v) {
            if ($v) {//如果值为true
                $new_arr[$k]=$v;
            }
        }
        
    }else{
      //传入回调函数名称
        foreach ($arr as $k=>$v){
            if ($func($v)) {//调用回调函数返回true
                $new_arr[$k] = $v;
            }
        }
    }
    return $new_arr;
}

$res=my_filter($array);
var_dump($res);

$res=my_filter($array,'is_int');
var_dump($res);